﻿using FrameWork.Design;
using FrameWork.Setting;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ScreenMonitor.ServerLib
{

    /// <summary>
    /// 表示服务端的全局Ip与端口设定
    /// </summary>
    [SettingParentDefine]
    public static class ServerGlobalSettingIpPort
    {

        /// <summary>
        /// 服务端使用的网络适配器描述
        /// </summary>
        [SettingItemDefine(SettingValueType.String, "NotSet")]
        [Browsable(true)]
        [DisplayName("网络适配器绑定")]
        [Description("设定服务端绑定的网络适配器")]
        [DefaultValue("NotSet")]
        [TypeConverter(typeof(NetworkInterfaceConverter))]
        public static string ServerBindAdapter { get; set; }      

        /// <summary>
        /// 表示服务端单播地址
        /// </summary>
        public static IPAddress ServerIpAddr { get;internal set; }

        /// <summary>
        /// 表示服务端广播地址
        /// </summary>
        public static IPAddress ServerMulticastIpAddr { get;internal set; }
        
        /// <summary>
        /// 服务端Tcp侦听端口
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,3568)]
        [Browsable(true)]
        [DisplayName("服务端Tcp侦听端口")]
        [Description("表示服务端用来创建Tcp连接的端口号")]
        [DefaultValue(3568)]
        public static int ServerTcpListenPort { get; set; }

        /// <summary>
        /// 服务端Udp侦听端口
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,3569)]
        [Browsable(true)]
        [DisplayName("服务端Udp侦听端口")]
        [Description("表示服务端用来创建Udp连接的端口号")]
        [DefaultValue(3568)]
        public static int ServerUdpListenPort { get; set; }

        /// <summary>
        /// 客户端Tcp侦听端口
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,3566)]
        [Browsable(true)]
        [DisplayName("客户端Tcp侦听端口")]
        [Description("表示客户端用来创建Tcp连接的端口号")]
        [DefaultValue(3566)]
        public static int ClientTcpListenPort { get; set; }

        /// <summary>
        /// 客户端Udp侦听端口
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,3567)]
        [Browsable(true)]
        [DisplayName("客户端Udp侦听端口")]
        [Description("表示客户端用来创建Udp连接的端口号")]
        public static int ClientUdpListenPort { get; set; }
    }

    /// <summary>
    /// 表示服务端全局屏幕监控图像设定
    /// </summary>
    [SettingParentDefine]
    public static class ServerGlobalSettingScreenViewImg
    {

        /// <summary>
        /// 表示服务端发送的屏幕图像宽度
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,128)]
        [Browsable(true)]
        [DisplayName("图像宽度")]
        [Description("表示客户端发送的屏幕图像宽度")]
        [DefaultValue(128)]
        public static int ScreenImgWidth { get; set; }

        /// <summary>
        /// 表示客户端发送图像的高度
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,128)]
        [Browsable(true)]
        [DisplayName("图像高度")]
        [Description("表示客户端发送的屏幕图像高度")]
        [DefaultValue(128)]
        public static int ScreenImgHeight { get; set; }

        /// <summary>
        /// 表示客户端发送图像的类型
        /// </summary>
        [SettingItemDefine(SettingValueType.String,"Jpeg")]
        [Browsable(true)]
        [DisplayName("图像类型")]
        [Description("表示分客户端发送的屏幕图像类型\n支持以下值：Bmp,Png,Jpeg,Gif")]
        [DefaultValue("Jpeg")]
        public static string ImageType { get; set; }

        /// <summary>
        /// 表示客户端发送图像的缩放模式
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32, PictureBoxSizeMode.Normal)]
        [Browsable(true)]
        [DisplayName("缩放模式")]
        [Description("表示客户端发送图像的缩放模式")]
        [DefaultValue(PictureBoxSizeMode.Normal)]
        public static PictureBoxSizeMode ImageSizeMode { get; set; }

        /// <summary>
        /// 表示是否自动开始发送图片
        /// </summary>
        [SettingItemDefine(SettingValueType.Bool,true)]
        [Browsable(true)]
        [DisplayName("自动开始发送截图")]
        [Description("表示当客户端连接时是否自动开始发送图片")]
        [DefaultValue(true)]
        public static bool AutoStartSendBmp { get; set; }

        /// <summary>
        /// 表示客户端发送截图的间隔
        /// </summary>
        [SettingItemDefine(SettingValueType.Int32,2000)]
        [Browsable(true)]
        [DisplayName("截图发送间隔")]
        [DefaultValue(2000)]
        public static int SendBmpRate { get; set; }
    }

}
